在JavaScript中创建空对象有两种不同的方法:
var objectA = {} var objectB = new Object()
脚本引擎如何处理它们有什么不同吗?有没有理由使用一个而不是另一个?
类似地,也可以使用不同的语法创建一个空数组:
var arrayA = [] var arrayB = new Array()
Már Örlygsso.. 447
使用没有任何好处new Object();
- 但{};
可以使您的代码更紧凑,更易读.
为了定义空对象,它们在技术上是相同的.该{}
语法是短,整齐(不以Java-ISH),并让你瞬间填充对象内联-就像这样:
var myObject = { title: 'Frog', url: '/img/picture.jpg', width: 300, height: 200 };
对于数组来说,使用new Array();
over 也几乎没有任何好处[];
- 只有一个小例外:
var emptyArray = new Array(100);
创建一个包含所有插槽的100项长数组undefined
- 在某些情况下(例如(new Array(9)).join('Na-Na ') + 'Batman!'
)可能很好/很有用.
永远不要使用new Object();
- 它比'{}'更笨拙,看起来很傻.
始终使用[];
- 除非您需要快速创建具有预定义长度的"空"数组.
即使您使用Array(100)语法,同一个数组在第101个位置也未定义; 这个数字唯一真正做的就是改变length属性的值. (21认同)
另外,要注意`new Array(1,2,3)`会导致`[1,2,3]`,但是`new Array(1)`会导致`[1]` 因此,"数组"的语义不一致,不必要地混淆. (10认同)
@Pablo我不知道你的论点是什么.像Douglas Crockford一样,我建议使用`[]`.那里没有争论.但是,你认为`new Array(100)`在某种程度上是"无效的",这是不真实的. (9认同)
@Pablo对于`new Array(100)`没有任何意义.阅读文献:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array (6认同)
OP询问有关创建空对象的问题.Guillermo在创建非空对象时指出了差异,这是正确的但不完全是OP所要求的. (2认同)
`new Array(len).fill(0);` (2认同)
我要补充说`Object.create(null)`对于创建空白对象很有用,而`{}`继承自Object原型. (2认同)
小智.. 88
是的,有区别,它们不一样.确实,你会得到相同的结果,但引擎的工作方式不同.其中一个是对象文字,另一个是构造函数,两种不同的方式在javascript中创建对象.
var objectA = {} //This is an object literal var objectB = new Object() //This is the object constructor
在JS中,一切都是一个对象,但你应该知道新的Object()有以下几点:它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字或一个空对象.
例如:new Object(1)
,将返回一个数字.new Object("hello")
将返回一个字符串,这意味着对象构造函数可以委托 - 取决于参数 - 对象创建到其他构造函数,如字符串,数字等...当您管理动态数据时,请务必记住这一点非常重要创建对象..
许多作者建议您不要使用对象构造函数,而是可以使用某种文字符号,在那里您将确保您创建的内容是您希望在代码中具有的内容.
我建议你进一步阅读javascript上的文字符号和构造函数之间的差异,以找到更多细节.
使用没有任何好处new Object();
- 但{};
可以使您的代码更紧凑,更易读.
为了定义空对象,它们在技术上是相同的.该{}
语法是短,整齐(不以Java-ISH),并让你瞬间填充对象内联-就像这样:
var myObject = { title: 'Frog', url: '/img/picture.jpg', width: 300, height: 200 };
对于数组来说,使用new Array();
over 也几乎没有任何好处[];
- 只有一个小例外:
var emptyArray = new Array(100);
创建一个包含所有插槽的100项长数组undefined
- 在某些情况下(例如(new Array(9)).join('Na-Na ') + 'Batman!'
)可能很好/很有用.
永远不要使用new Object();
- 它比'{}'更笨拙,看起来很傻.
始终使用[];
- 除非您需要快速创建具有预定义长度的"空"数组.
是的,有区别,它们不一样.确实,你会得到相同的结果,但引擎的工作方式不同.其中一个是对象文字,另一个是构造函数,两种不同的方式在javascript中创建对象.
var objectA = {} //This is an object literal var objectB = new Object() //This is the object constructor
在JS中,一切都是一个对象,但你应该知道新的Object()有以下几点:它可以接收一个参数,并且根据该参数,它将创建一个字符串,一个数字或一个空对象.
例如:new Object(1)
,将返回一个数字.new Object("hello")
将返回一个字符串,这意味着对象构造函数可以委托 - 取决于参数 - 对象创建到其他构造函数,如字符串,数字等...当您管理动态数据时,请务必记住这一点非常重要创建对象..
许多作者建议您不要使用对象构造函数,而是可以使用某种文字符号,在那里您将确保您创建的内容是您希望在代码中具有的内容.
我建议你进一步阅读javascript上的文字符号和构造函数之间的差异,以找到更多细节.
这些具有相同的最终结果,但我只想补充一点,使用文字语法可以帮助人们习惯JSON的语法(JavaScript文字对象语法的字符串ified子集),所以进入这可能是一个好习惯. .
另一件事:如果忘记使用new
运算符,可能会出现细微的错误.因此,使用文字将帮助您避免该问题.
最终,它将取决于情况和偏好.
var objectA = {}
根据我的经验,使用起来要快得多,所以最好采用"标准"并节省一些打字.
对象和数组文字语法{}/[]是在JavaScript 1.2中引入的,因此在4.0之前的Netscape Navigator版本中不可用(并且会产生语法错误).
我的手指仍默认说新的Array(),但我是一个非常老的人.值得庆幸的是,Netscape 3不是今天很多人都要考虑的浏览器......
我相信{}
在这里的一个Javascript视频中推荐这是一个很好的编码约定.new
是伪古典继承所必需的.这种var obj = {};
方式有助于提醒您,这不是一种经典的面向对象语言,而是一种原型语言.因此,您真正需要的唯一时间new
是使用构造函数.例如:
var Mammal = function (name) { this.name = name; }; Mammal.prototype.get_name = function () { return this.name; } Mammal.prototype.says = function() { return this.saying || ''; }
然后就像这样使用:
var aMammal = new Mammal('Me warm-blooded'); var name = aMammal.get_name();
使用{}
as的另一个好处new Object
是可以使用它来执行JSON样式的对象文字.
如果您希望创建一个没有长度的数组:
var arr = [];
比...更快 var arr = new Array();
如果要创建具有一定长度的空数组:
var arr = new Array(x);
快于var arr = []; arr[x-1] = undefined
;
对于基准测试,请单击以下内容:https://jsfiddle.net/basickarl/ktbbry5b/
然而,我不知道两者的内存占用,我可以想象new Array()
占用更多空间.